import JSEncrypt from 'jsencrypt';
import jsrsasign from 'jsrsasign'
import { publicKey, privateKey, privateKey2 } from '@/common/js/constant'
/**
 * 生成签名
 * @param {Object} data
 * @return {type}
 */
export function getSignCode(data){
    //此处操作与后端约定参数
    // 创建RSAKey对象
    var rsa = new jsrsasign.RSAKey();
    //因为后端提供的是pck#8的密钥对，所以这里使用 KEYUTIL.getKey来解析密钥
    var k = privateKey
    // 将密钥转码
    rsa = jsrsasign.KEYUTIL.getKey(k);
    // 创建Signature对象，设置签名编码算法
    var sig = new jsrsasign.KJUR.crypto.Signature({"alg": "SHA256withRSA"});
    // 初始化
    sig.init(rsa)
    // 传入待加密字符串
    sig.updateString(data)
    // 生成密文
    var sign = jsrsasign.hextob64(sig.sign());
    //把参数与密文拼接好，返回
    var params = sign; 
    return params
}

/**
 * 验证签名
 * @param {String} strIng 签名前的明文
 * @param {String} data 签名后的数据
 * @return {Boolean} true | false
 */
 export  function attestationCode(strIng,data){
	// 创建RSAKey对象
	var rsa = new jsrsasign.RSAKey();
    var signPublicKey = publicKey
	// 将公钥转码
	signPublicKey = jsrsasign.KEYUTIL.getKey(signPublicKey);
	// 创建Signature对象，设置签名编码算法
	var sig = new jsrsasign.KJUR.crypto.Signature({"alg": "SHA256withRSA"});
	// 初始化
	sig.init(signPublicKey)
	// 传入待加密字符串
	sig.updateString(strIng);
	// !接受的参数是16进制字符串!
	let sign = sig.verify(jsrsasign.b64tohex(data));
	return sign;
}

/**
 * @description 加密
 * @param {*} publicKey 加密公钥
 * @param {*} data 
 * @returns 
 */  
 export function rsaEncryptedData(str) {  
	let pubKey = publicKey;// ES6 模板字符串 引用 rsa 公钥
    let encryptStr = new JSEncrypt();
    encryptStr.setPublicKey(pubKey); // 设置 加密公钥
    let  data = encryptStr.encrypt(str.toString());  // 进行加密
    return data;
}

/**
 * @description 解密
 * @param {*} privateKey2 解密私钥
 * @param {*} data 
 * @returns 
 */
export function rsadecryptData(params){  
    let decrypt = new JSEncrypt();
    // 设置私钥
    decrypt.setPrivateKey(privateKey2);
    return decrypt.decrypt(params);
}